from tools import TOOLS
from tools.system_paths import get_system_path
from tools.execute_command import get_system_info

def get_system_prompt():
    # 获取系统路径
    try:
        desktop_path = get_system_path("desktop")
        downloads_path = get_system_path("downloads")
        documents_path = get_system_path("documents")
    except Exception:
        desktop_path = "%USERPROFILE%\\Desktop"
        downloads_path = "%USERPROFILE%\\Downloads"
        documents_path = "%USERPROFILE%\\Documents"

    # 获取系统环境信息
    system_info = get_system_info()
    os_name = system_info["os"].capitalize()
    shell_name = system_info["shell"]
    shell_type = system_info["shell_type"]

    # 根据系统类型设置常用命令示例
    if system_info["os"] == "windows":
        cmd_examples = '''Windows CMD 常用命令示例：
- 获取时间：time /t
- 获取日期：date /t
- 列出目录：dir
- 切换目录：cd
- 清屏：cls'''
    else:
        cmd_examples = '''Unix Shell 常用命令示例：
- 获取时间：date "+%H:%M"
- 获取日期：date "+%Y-%m-%d"
- 列出目录：ls
- 切换目录：cd
- 清屏：clear'''

    # 基础提示词部分
    base_prompt = f'''你是一个AI助手，可以通过工具来完成用户的任务。你需要直接理解并执行用户的明确请求，不要过度询问。

当前系统环境：
- 操作系统：{os_name}
- 终端：{shell_name}
- Shell类型：{shell_type}

{cmd_examples}

重要规则：
1. 严格执行一次只能使用一个工具的规则。在收到工具执行结果并评估之前，禁止调用下一个工具。
2. 在每次使用工具前，必须使用<thinking>标签说明你的思考过程。
3. 只在必要时使用ask_user工具询问用户，比如：
   - 用户的请求不够明确时
   - 需要用户确认某个重要操作时
   - 需要用户选择下一步操作时
4. 对于明确的请求要直接执行，比如：
   - "搜索新闻" -> 直接使用search_web搜索新闻
   - "创建文件" -> 直接使用write_file创建文件
   - "打开文件" -> 直接使用open工具打开文件
5. 工具执行后必须分析执行结果：
   - 如果执行成功，说明执行结果并标记任务完成
   - 如果执行失败，分析失败原因并尝试其他方法
   - 如果需要继续执行其他步骤，清晰说明下一步计划
6. 使用complete_task标记任务最终完成

工作流程示例：
<thinking>我需要获取并展示用户桌面上的文件。</thinking>
<system_paths>
<path_type>desktop</path_type>
</system_paths>

[得到桌面路径: {desktop_path}]

<thinking>已获取桌面路径，现在列出文件。</thinking>
<list_files>
<path>{desktop_path}</path>
</list_files>

[得到文件列表...]

<thinking>任务已完成，总结信息。</thinking>
<complete_task>
<message>已显示桌面文件列表。</message>
</complete_task>

可用工具:'''

    # 添加工具列表和描述
    for name, tool in TOOLS.items():
        base_prompt += f"\n{name}: {tool.description}"

    # 添加工具详细说明
    base_prompt += "\n\n工具使用详情:"
    for name, tool in TOOLS.items():
        base_prompt += f"\n\n{name}:"
        base_prompt += "\n参数:"
        for param_name, param_info in tool.parameters.items():
            required = "必需" if param_info.get("required", False) else "可选"
            base_prompt += f"\n- {param_name}: ({param_info['type']}, {required}) {param_info['description']}"
        if tool.example:
            # 替换示例中的路径
            example = tool.example
            example = example.replace("C:\\Users\\用户名\\Desktop", desktop_path)
            example = example.replace("C:\\Users\\用户名\\Downloads", downloads_path)
            example = example.replace("C:\\Users\\用户名\\Documents", documents_path)
            base_prompt += f"\n示例:\n{example}"

    # 修改完整任务示例部分
    base_prompt += '''

记住：
1. 一次只能使用一个工具
2. 必须使用<thinking>标签说明思考过程
3. 对明确的请求直接执行，不要过度询问
4. 只在必要时使用ask_user工具询问用户
5. 使用complete_task标记任务最终完成
'''
    
    return base_prompt